Skip to content

feat(capability): Capability Provider Adapter Foundation#52

Merged
selimmujdeci merged 1 commit into
mainfrom
feat/capability-provider-adapter
Jul 11, 2026
Merged

feat(capability): Capability Provider Adapter Foundation#52
selimmujdeci merged 1 commit into
mainfrom
feat/capability-provider-adapter

Conversation

@selimmujdeci

Copy link
Copy Markdown
Owner

Amaç

Gerçek runtime/cihaz/platform kanıtlarını salt-okunur biçimde Capability Registry kayıtlarına dönüştüren provider adapter temeli: gerçek kanıt → Capability Provider Adapter → Capability Registry.

Yalnız provider foundation. Gerçek provider implementasyonları · Event Bus wiring · SystemBoot wiring · persistence ayrı PR'lar; native tarama başlatmaz, yeni OBD/CAN komutu yok, Registry karar kurallarını değiştirmez, UI/SQL yok.

Salt-okunur analiz bulguları

  • Doğrudan gerçek kaynak: deviceCapabilities (WebGL/CSS/SAB/cores browser probe → device/platform); vehicleHal.getCapability/hasSignal (araç sinyali desteği, foundation'da hepsi false)
  • Yalnız browser/native API ile doğrulanabilen: gps/microphone/bluetooth/storage → "API var" der ama gerçek donanım erişimini kesinleştirmez (→ düşük confidence/degraded)
  • Config/lisans: oem.* · ai.gemini/groq/claude (BYOK anahtarı) → source config/license
  • Runtime kaynağı hiç yok: vehicle.ignition (kontak yok) · ai.grok (xAI yok) · navigation.offline_map (tile paketi yoksa) → unknown/unavailable kalır
  • UI/dosya/modül varlığı capability kanıtı değildir

Adapter mimarisi

Donanımı doğrudan taramaz — yalnız DI ile verilen providers'ı okur. Foundation'da yerleşik gerçek provider yok (gerçek prob'lar ayrı wiring PR'ı).

Provider sözleşmesi: { id, domain, source, authoritative?, refreshPolicy?, read() } (read sync/async, kaynak yoksa null). Provider sonucu → Registry evidence'ına normalize → resolveCapability(id, evidence, domain)status'ü Registry çözer (karar kuralları değişmez). Yalnız değişeni günceller (imza dedup → duplicate update yok, O(1)).

API

start · refresh · refreshProvider · stop · getStatus · getLastRefreshAt · getProviderResults · reset · dispose

Refresh / DeviceTier / fail-soft

  • start'ta ilk refresh + açık çağrı; steady-state timer/polling yok; provider'lar paralel (Promise.allSettled → biri diğerini bloke etmez); opt-in DI timeout (settle'da temizlenir → leak yok); timeout/hata/null → güvenli unknown
  • DeviceTier varlık uydurmaz (Registry tier engeli — low'da ai.local_model restricted); high tier kanıtsız açmaz
  • Provider throw / Registry update hatası izole; public API throw etmez; dispose sonrası no-op

Privacy / immutability / yalınlık

  • provider/details/reason sanitize (VIN/MAC/koordinat/secret/API-key sızmaz)
  • getProviderResults dondurulmuş kopya (nested dahil); girdi mutate edilmez
  • Registry'yi doğrudan import etmez (yapısal DI + type-only → import yan etkisiz); Event Bus/SystemBoot'a bağlanmaz; persistence yok; bounded 128 provider; Registry'yi dispose etmez

Yeni/değişen dosyalar

Doğrulama

  • tsc -b · ✅ ESLint · ✅ Hedef 41/41 · ✅ Tam suite 3009/3009 · ✅ Production build

Bilinen eksikler

Gerçek provider implementasyonları + Event Bus + SystemBoot wiring + persistence = ayrı PR'lar. Cihazda doğrulama Ledger #37 🔴.

🤖 Generated with Claude Code

…try köprüsü

Gerçek runtime/cihaz/platform kanıtlarını salt-okunur biçimde Capability Registry
kayıtlarına aktaran provider adapter. Yalnız provider foundation — gerçek provider
implementasyonları/Event Bus/SystemBoot wiring/persistence ayrı PR'lar; native tarama
başlatmaz, Registry karar kurallarını değiştirmez.

Salt-okunur analiz: doğrulanabilir kaynaklar sınırlı (deviceCapabilities browser
probe, vehicleHal signal support, browser API gps/mic/bt/storage, config/lisans);
runtime kaynağı hiç yok: vehicle.ignition/ai.grok/navigation.offline_map → unknown.

- Provider sözleşmesi {id, domain, source, authoritative?, refreshPolicy?, read()};
  read sync/async, kaynak yoksa null. Foundation'da yerleşik gerçek provider yok (DI).
- Provider sonucu → Registry evidence → resolveCapability (status Registry'de çözülür).
- Yalnız değişeni günceller (imza dedup, duplicate update yok, O(1)).
- API: start/refresh/refreshProvider/stop/getStatus/getLastRefreshAt/getProviderResults/
  reset/dispose. Steady-state timer/polling yok; paralel allSettled (biri diğerini
  bloke etmez); opt-in DI timeout (settle'da temizlenir); timeout/hata/null → unknown.
- DeviceTier varlık uydurmaz (Registry tier engeli); kaynaksız capability açılmaz.
- Fail-soft (provider/Registry hatası izole), privacy (sanitize), immutable çıktı.
- Registry'yi doğrudan import etmez (yapısal DI + type-only → import yan etkisiz);
  Registry'yi dispose etmez; bounded 128 provider; yeni bağımlılık yok.
- 41 birim testi (45 senaryo).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PaohAWKE2s1FhB6Hmmcj2p
@vercel

vercel Bot commented Jul 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
car-launcher-pro Ready Ready Preview, Comment Jul 11, 2026 7:50am
carospro Ready Ready Preview, Comment Jul 11, 2026 7:50am

@selimmujdeci selimmujdeci merged commit 334bf3e into main Jul 11, 2026
8 checks passed
selimmujdeci pushed a commit that referenced this pull request Jul 12, 2026
Gerçek rapor gövdesinde platform bölümü doğrulandı: eventBus published=1/retained=1,
halWiring started + activeSubscriptionCount=1 → tek bus/tek abonelik ADB veya global
debug expose OLMADAN okunabiliyor. Gizlilik sızıntısı yok; bölüm 484 B (~%3.4).
Crash/ANR yok, CPU/RSS regresyonu yok.

Satır 🔴 KALIYOR: low-tier (T507/K24-Mali-400) doğrulaması yapılmadı.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012M8LbxyAqd22EU1rqtTjft
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant